#ifndef __NETWORK_EVENTS_H__
#define __NETWORK_EVENTS_H__

/*
	NetworkEvents.h - 网络事件处理模块

*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "utils.h"
#include "mlog.h"


#ifndef MAX_CONNECTIONS 
#define MAX_CONNECTIONS		128
#endif

#ifdef __cplusplus
extern "C" {
#endif
extern int64_t now_time2;

// socket接受处理函数
typedef int (* accept_handler)(int newfd, const char* ip, int port, void* param);
// 接收数据处理函数
typedef int (* data_handler)(const char* data, int size, void* param);
typedef int (* udp_data_handler)(const char* ip, int port, const char* data, int size, void* param);
// 连接结果的处理函数
typedef int (* connect_handler)(int newfd, int errcode, void* param);
// socket关闭处理函数
typedef int (* closed_handler)(int errcode, void* param);


// 初始化网络事件模块
int network_init();
// 关闭网络事件模块
void network_uninit();
// 检查网络事件
void network_process_events();
// 检查socket是否可发送数据
int network_can_send(int fd);
/* 监听TCP端口
	参数:
		bindip		监听绑定的IP地址，空值表示监听所有地址
		port		要监听的端口
		accept_fn	接受TCP连接的回调函数
		closed_fn	处理监听socket关闭的回调函数
		param		回调函数的自定义参数
*/
int network_listen(const char* bindip, int port, accept_handler accept_fn, closed_handler closed_fn, void* param);
int network_connect(const char* host, int port, const char* bindip, int timeout,
	connect_handler connect_fn, data_handler data_fn, closed_handler closed_fn, void* param);
/* 接受TCP连接
	参数:
		fd			TCP socket句柄
		data_fn		处理接收数据的回调函数
		closed_fn	处理监听socket关闭的回调函数
		param		回调函数的自定义参数
*/
int network_accept(int fd, data_handler data_fn, closed_handler closed_fn, void* param);
// 发送数据
int network_send(int fd, const char* data, int size);
// 关闭socket
void network_close(int fd);
void network_setsndbuf(int fd, int val);

int network_udpopen(int port, int broadcast, udp_data_handler data_fn, closed_handler closed_fn, void* param);
int network_udpsend(int fd, const char* ip, int port, const char* data, int len);

void network_getlocalip(char *ip);
void network_getbroadcastip(char *ip);

#ifdef __cplusplus
}
#endif

#endif

